<?php

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
namespace Agp\CoreBundle\Manager;

use Agp\CoreBundle\Manager\BaseManager;
use Agp\AgapeBundle\Form\Handler\RepasseHandler;
use Agp\CoreBundle\Entity\Repasse;

/**
 * Description of RepasseManager
 *
 * @author bondcs
 */
class RepasseManager extends BaseManager{
    
    public function persistRepasse($entity, $estrategia) {
        parent::persist($entity);
        
//        if ($estrategia == RepasseHandler::INSERT)
//            $this->container->get('agp.email')->emailRepassePendente($entity);
    }
    
    public function updateRepasse($entity, $entityOld, $estrategia) {
        
        parent::update($entity);
        
        if ($estrategia == RepasseHandler::UPDATE_AGAPE AND $entity->getSituacao() != $entityOld->getSituacao()){
            if ($entity->getSituacao() == Repasse::SIT_PENDENTE){
                $entity->setVlrRepassado(0);
                foreach ($entity->getPedidos() as $p){
                    $p->setRepasse(null);
                    $p->setRepassado(false);
                    $this->em->persist($p);
                }
                
                $this->em->flush();
            }
        }
        
        parent::update($entity);
    }
    
    public function remove($entity) {
        
        foreach ($entity->getPedidos() as $p){
            $p->setRepasse(null);
            $p->setRepassado(false);
            $this->em->persist($p);
        }
        
        $this->em->flush();
        
        parent::remove($entity);
    }

    public function transferencia(Repasse $entity){
        
        $sql = "SELECT p.cod_pedido, v.cod_evento, v.dt_venda, p.cod_cartao,
                sum((CASE WHEN v.tipo = 'Terminal Cartao' THEN 
                            iv.subtotal - (iv.subtotal * 0.07) 
                     ELSE 
                            iv.subtotal 
                     END)
                ) as vlrPedido,
                r.cod_ultimo_pedido_repassado, r.vlr_disponivel_ultimo_pedido
                FROM item_venda iv
                JOIN venda v ON v.cod_venda = iv.cod_venda
                JOIN pedido p ON p.cod_pedido = v.cod_pedido AND v.cod_pedido IS NOT NULL
                LEFT JOIN repasse r ON IFNULL(r.cod_evento,r.cod_empresa) = IFNULL(v.cod_evento,v.cod_empresa)
                        AND r.ultimo = 1
                WHERE ((p.cod_pedido > IFNULL(r.cod_ultimo_pedido_repassado,0))OR
                        (IF(
                                r.vlr_disponivel_ultimo_pedido > 0,
                                r.cod_ultimo_pedido_repassado,
                                r.cod_ultimo_pedido_repassado + 1) = p.cod_pedido)
                        )
                AND v.cod_evento = :evento AND iv.situacao = 'Ativo' AND v.situacao = 'Ativo'
                GROUP BY p.cod_pedido
                ORDER BY p.cod_pedido";
        
        $parametros = array();
        $parametros['evento'] = $entity->getEvento() != null ? $entity->getEvento()->getCodEvento() : null;
        
        $em = $this->container->get('doctrine')->getManager()->getConnection();
        $stmt = $em->prepare($sql);
        $stmt->execute($parametros);
        $result = $stmt->fetchAll();
        
        $repasse = $entity->getVlrSolicitado();
        $repasseWithJuros = 0;
        $ultimoRepasse = $this->repository->getUltimoRepasseByEvento($entity);
        
        foreach ($result as $key => $p){
            if ($key == 0 AND $p['vlr_disponivel_ultimo_pedido'] != null AND $p['vlr_disponivel_ultimo_pedido'] != '0.00')
                $p['vlrPedido'] = $p['vlr_disponivel_ultimo_pedido'];
     
            if ($p['vlrPedido'] >= $repasse){
                
                $restante = $p['vlrPedido'] - $repasse;
                $p['vlrPedido'] = $repasse;
    
                $repasseWithJuros += $this->getJuros($p);
                $entity->setVlrRepassado($repasseWithJuros);
        
                if ($key > 0 OR $ultimoRepasse == null){
                    $entity->setVlrDisponivelUltimoPedido($restante);
                    $entity->setCodUltimoPedidoRepassado($p['cod_pedido']);
                    $entity->setUltimo(1);
 
                }else{
                    
                    $ultimoRepasse->setVlrDisponivelUltimoPedido($restante);
                    $ultimoRepasse->setCodUltimoPedidoRepassado($p['cod_pedido']);
                    $this->update($ultimoRepasse);
 
                }
                
                if ($key > 0 AND $ultimoRepasse != null){
                        $ultimoRepasse->setUltimo(0);
                        $ultimoRepasse->setVlrDisponivelUltimoPedido(0);
                        $this->update($ultimoRepasse);
                }
                
                $this->update($entity);
                break;
            }else{
                $repasseWithJuros += $this->getJuros($p);
                $repasse -= $p['vlrPedido'];
                
                if ($p['boletoPgtoConfirmado'] == true){
                    
                }

            }

        }
        
    }
    
    public function getJuros($pedido){
        
        $jurosAntecipacao = 4;
        $dtVenda = new \DateTime($pedido['dt_venda']);
        $hoje = new \DateTime;
        $diff = $dtVenda->diff($hoje);
        $valor = $pedido['vlrPedido'];
   
        if ($diff->d <= 30 AND $pedido['cod_cartao'] != null){
            $valor = $valor - (($valor*($jurosAntecipacao/100)) / 30) * (30 - $diff->d);
        }
        
        return $valor;
    }
}

?>
